/**
 * Aegis 功能测试文件
 * 用于验证 Aegis 上报功能是否正常工作
 */

import {
  reportEvent,
  info,
  error,
  report,
  reportTime,
  setUser,
  getAegisInstance
} from './aegis';
import { AegisReporter, AEGIS_EVENTS } from './aegis-examples';

/**
 * 测试 Aegis 基础功能
 */
export function testAegisBasicFunctions(): void {
  console.log('开始测试 Aegis 基础功能...');

  // 检查 Aegis 实例是否存在（在 Electron 中实例在主进程）
  const aegisInstance = getAegisInstance();
  if (aegisInstance === null) {
    console.log('✓ Aegis 实例在主进程中，渲染进程通过 IPC 通信');
  }

  // 测试设置用户
  setUser('test_user_123');
  console.log('✓ 用户设置完成');

  // 测试事件上报
  reportEvent('test_basic_event');
  console.log('✓ 基础事件上报完成');

  // 测试日志上报
  info('Test info message', { level: 'info', timestamp: Date.now() });
  report('Test report message', { type: 'test', timestamp: Date.now() });
  console.log('✓ 日志上报完成');

  // 测试性能上报
  reportTime('test_performance', 100);
  console.log('✓ 性能数据上报完成');

  console.log('Aegis 基础功能测试完成！');
}

/**
 * 测试 AegisReporter 类功能
 */
export function testAegisReporter(): void {
  console.log('开始测试 AegisReporter 类功能...');

  // 测试用户登录上报
  AegisReporter.reportUserLogin('test_user_456');
  console.log('✓ 用户登录上报完成');

  // 测试页面访问上报
  AegisReporter.reportPageView('Test Page', '/test');
  console.log('✓ 页面访问上报完成');

  // 测试功能使用上报
  AegisReporter.reportFeatureUsage('test_feature', 'click', { 
    button: 'submit',
    form: 'login'
  });
  console.log('✓ 功能使用上报完成');

  // 测试 AI 对话上报
  AegisReporter.reportAIChat('start');
  AegisReporter.reportAIChat('send', 1);
  AegisReporter.reportAIChat('receive', 1);
  console.log('✓ AI 对话上报完成');

  // 测试屏幕录制上报
  AegisReporter.reportScreenRecord('start');
  setTimeout(() => {
    AegisReporter.reportScreenRecord('stop', 5000);
  }, 100);
  console.log('✓ 屏幕录制上报完成');

  // 测试性能指标上报
  AegisReporter.reportPerformance('test_render_time', 150);
  console.log('✓ 性能指标上报完成');

  // 测试自定义事件上报
  AegisReporter.reportCustomEvent('test_custom', {
    category: 'testing',
    action: 'manual_test',
    value: 1
  });
  console.log('✓ 自定义事件上报完成');

  // 测试批量事件上报
  AegisReporter.reportBatchEvents([
    { name: 'batch_event_1', data: { type: 'test' } },
    { name: 'batch_event_2', data: { type: 'test' } },
    { name: 'batch_event_3', data: { type: 'test' } }
  ]);
  console.log('✓ 批量事件上报完成');

  console.log('AegisReporter 类功能测试完成！');
}

/**
 * 测试常量事件
 */
export function testAegisConstants(): void {
  console.log('开始测试 Aegis 常量事件...');

  // 测试所有预定义事件常量
  const events = [
    AEGIS_EVENTS.USER_LOGIN,
    AEGIS_EVENTS.PAGE_VIEW,
    AEGIS_EVENTS.AI_CHAT_START,
    AEGIS_EVENTS.SCREEN_RECORD_START,
    AEGIS_EVENTS.APP_STARTUP,
    AEGIS_EVENTS.CUSTOM_EVENT
  ];

  events.forEach((eventName) => {
    reportEvent(eventName);
    console.log(`✓ 事件 ${eventName} 上报完成`);
  });

  console.log('Aegis 常量事件测试完成！');
}

/**
 * 测试错误上报
 */
export function testAegisErrorReporting(): void {
  console.log('开始测试 Aegis 错误上报...');

  // 测试普通错误上报
  error('Test error message', {
    errorType: 'test_error',
    stack: 'Test stack trace',
    timestamp: Date.now()
  });
  console.log('✓ 普通错误上报完成');

  // 测试通过 AegisReporter 上报错误
  AegisReporter.reportError(
    'network_error',
    'Test network connection failed',
    'Error: Network timeout\n    at testFunction (test.js:1:1)',
    { url: '/api/test', method: 'GET' }
  );
  console.log('✓ 网络错误上报完成');

  console.log('Aegis 错误上报测试完成！');
}

/**
 * 运行所有测试
 */
export function runAllAegisTests(): void {
  console.log('=== 开始 Aegis 完整功能测试 ===');

  try {
    testAegisBasicFunctions();
    testAegisReporter();
    testAegisConstants();
    testAegisErrorReporting();

    console.log('=== Aegis 完整功能测试成功完成 ===');
  } catch (error) {
    console.error('=== Aegis 测试过程中出现错误 ===', error);
    
    // 上报测试错误
    AegisReporter.reportError(
      'test_error',
      'Aegis test failed',
      error instanceof Error ? error.stack : String(error)
    );
  }
}

/**
 * 在开发环境中自动运行测试
 */
if (import.meta.env.DEV) {
  // 延迟执行测试，确保 Aegis 已完全初始化
  // setTimeout(() => {
  //   console.log('开发环境检测到，准备运行 Aegis 测试...');
  //   runAllAegisTests();
  // }, 3000);
}
